package modelo.diagrama.de.classes;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;

import modelo.diagramas.ObjetoBase;

public class Classe extends ObjetoBase  {

	public static final int LARGURA_INICIAL = 100;
	public static final int ALTURA_INICIAL = 150;

	private String tituloClasse = "Classe";
	private String esteriotipo = "";
	private List<String> textoAtributos = new ArrayList<String>();
	private List<String> textoMetodos = new ArrayList<String>();
	
	

	public Classe(int x, int y, Color corObjeto, Color corAtributo,
			Color corContorno) {
		super(x, y, (x + LARGURA_INICIAL), (y + ALTURA_INICIAL), corObjeto,
				corAtributo, corContorno);
	}



	@Override
	public void pinta(Graphics g) {
		this.setLargura(LARGURA_INICIAL);
		this.setAltura(ALTURA_INICIAL);

		if (this.getTituloClasse().length() > 10) {
			this.setLargura(this.getLargura() + 10
					* (this.getTituloClasse().length() - 10));
		}

		// Titulo da classe.
		int xTituloClasse = getX();
		int larguraTituloClasse = getLargura();
		int yTituloClasse = getY();
		int alturaTituloClasse = getAltura() / 5;

		// Atributo da classe.
		int xAtributoClasse = getX();
		int larguraAtributoClasse = getLargura();
		int yAtributoClasse = yTituloClasse + alturaTituloClasse;
		int alturaAtributoClasse = (2 * getAltura()) / 5;

		// Atributo dos metodos
		int xMetodoClasse = getX();
		int larguraMetodoClasse = getLargura();
		int yMetodoClasse = getY() + alturaTituloClasse + alturaAtributoClasse;
		int alturaMetodoClasse = (2 * getAltura()) / 5;

		// Pinta o retangulo Principal
		g.setColor(getCorObjeto());
		g.fill3DRect(getX(), getY(), getLargura(), getAltura(), true);

		// Pinta os retangulos pequenos.
		g.setColor(getCorAtributos());
		g.drawRect(xTituloClasse, yTituloClasse, larguraTituloClasse,
				alturaTituloClasse);
		g.drawRect(xAtributoClasse, yAtributoClasse, larguraAtributoClasse,
				alturaAtributoClasse);
		g.drawRect(xMetodoClasse, yMetodoClasse, larguraMetodoClasse,
				alturaMetodoClasse);

		// Pinta o contorno do objeto
		g.setColor(getCorContorno());
		g.draw3DRect(getX(), getY(), getLargura(), 0, true);
		g.draw3DRect(getX() + getLargura(), getY(), 0, getAltura(), true);
		g.draw3DRect(getX(), getY(), 0, getAltura(), true);
		g.draw3DRect(getX(), getY() + getAltura(), getLargura(), 0, true);

		// Pinta o texto na classe.
		g.drawString(getEsteriotipo(), getX() + (getLargura() / 6), getY()
				+ getAltura() / 9);
		g.drawString(getTituloClasse(), getX() + (getLargura() / 4), getY()
				+ (getAltura() / 5));

		for (String textoAtributo : textoAtributos) {
			g.drawString(textoAtributo, 30, 20);
		}
		
		pintaBordaSelecionado(g);
		
	}

	public String getTituloClasse() {
		return tituloClasse;
	}

	public void setTituloClasse(String tituloClasse) {
		this.tituloClasse = tituloClasse;
	}

	public List<String> getTextoAtributos() {
		return textoAtributos;
	}

	public void setTextoAtributos(List<String> textoAtributos) {
		this.textoAtributos = textoAtributos;
	}

	public List<String> getTextoMetodos() {
		return textoMetodos;
	}

	public void setTextoMetodos(List<String> textoMetodos) {
		this.textoMetodos = textoMetodos;
	}


	public String getEsteriotipo() {
		return esteriotipo;
	}

	public void setEsteriotipo(String esteriotipo) {
		this.esteriotipo = esteriotipo;
	}
	
}
